在我們知道了程式透過變數來讓程式可以隨時存取我們輸入的資料後,接下來我們要討論的是在程式運行時所執行的指令,這些指令被我們稱為運算式 (Expression)。
隨著我們在以後逐漸熟悉所使用的程式語言後,我們所使用的運算式可能會變得越來越複雜,但無論我們如何改變運算式,它都必然會包含著兩個主要的元素:運算元 (Operand) 跟運算子 (Operator)。
運算元指的是我們在這次的運算式中所使用的任何資料,無論是什麼類型的資料型態,是變數、常數或是即時輸入的資料,只要它有被存取,它就被稱為運算元。
運算子指的是我們在這次的運算式中對運算元 (資料) 所進行的一切行為,無論是進行數學的簡單計算、把資料儲存到變數中等等,只要是使用了資料的行為,它就被稱為運算子。
以下是一個簡單的運算式的例子,我們可以看看裡面的構造是什麼:
= 跟 + 分別是儲存資料跟進行計算的行為,它們是運算子
V V
[x = a + b] <= 這一整句指令是運算式
^ ^ ^
| a 跟 b 是被存取並在運算式中用來進行計算的資料,它們是運算元
x 是用來儲存計算結果的容器,也就是變數
雖然在一條運算式中可能會由很多的運算子所組成,但每一個運算子所使用的運算元數都是固定的,例如加法的計算只會使用兩個運算元,因此我們可以使用以下的分類來快速表達它們所使用的運算元數是多少:
除了根據使用的運算元數分類的表達方式外,我們還會根據運算子的功能來進行以下主要的分類:
接下來就讓我們逐一的探討這些運算子吧~
算術運算子指的是對運算元進行數學的計算行為並在行為結束後會回傳 (Return)計算結果的值,也就是說會把計算結果的資料給予我們,例如加法、減法、乘法及除法等。算術運算子大多為二元運算子並從左至右運算,以下是一些常見的算術運算子的例子及其寫法:
運算子 | 說明 | 例子 |
---|---|---|
+ | 加法 | a + b |
- | 減法 | a - b |
* | 乘法 | a * b |
/ | 除法 | a / b |
% | 取餘數 | a % b |
大多數的程式語言除了二元的算術運算子外,也會提供兩個特殊的一元運算子 ++ 跟 --,它們是讓運算元在提供儲存的值前或後進行加一或減一並儲存起來的快速行為,由於把它們放到運算元的前面或後面時會影響到它們執行運算子的順序,它們很常會被用來配合其他的行為一起執行,這點會在後續的主題中進行討論。以下是使用的例子:
例子 | 說明 |
---|---|
x++ | 先提供變數 x 的值,再把 x + 1 的計算結果重新儲存到變數 x 中 |
x-- | 先提供變數 x 的值,再把 x - 1 的計算結果重新儲存到變數 x 中 |
++x | 先把 x + 1 的計算結果重新儲存到變數 x 中,再提供變數 x 的值 |
--x | 先把 x - 1 的計算結果重新儲存到變數 x 中,再提供變數 x 的值 |
算術運算子主要被運用在數字的資料,也就是整數資料型態跟浮點數資料型態中。可是,加法運算子 (+) 有時侯會被運用在字串資料型態中,讓兩個字串合在一起變成更長的字串,有些程式語言會把這個用法的加法運算子稱為字串運算子 (String Operators)。
比較運算子是用來比較兩個運算元的值並把結果以布林值資料型態回傳給我們的二元運算子。以下是一些常見的比較運算子的例子及其寫法:
例子 | 運算子 | 說明 |
---|---|---|
a == b | == | a 的值是否等於 b 的值 |
a != b | != | a 的值是否不等於 b 的值 |
a > b | > | a 的值是否大於 b 的值 |
a >= b | >= | a 的值是否大於或等於 b 的值 |
a < b | < | a 的值是否小於 b 的值 |
a <= b | <= | a 的值是否小於或等於 b 的值 |
它們大多數的時候都是被運用在數字的資料中,但等於及不等於的運算子也很常被運用在其他的資料型態中。
如果說算術運算子是用來計算整數資料型態跟浮點數資料型態的運算子,那邏輯運算子就是用來計算布林值資料型態的運算子。布林值資料型態及邏輯運算子都很常在一些後續的程式概念,陳述式,中被使用,因此邏輯的運算非常重要。以下是常見的邏輯運算子。
1. AND 邏輯運算子
AND 邏輯運算子在大多數的程式語言中是以 AND 或 & 表示的二元運算子。只有左右的運算元的值都是 True 的時候,它才會回傳 True 值,否則都會回傳 False 值。以下為使用 AND 邏輯運算子的一些可能的狀況跟該狀況下會回傳的值:
a 的值 | b 的值 | a AND b 回傳的值 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
2. OR 邏輯運算子
OR 邏輯運算子在大多數的程式語言中是以 OR 或 | 表示的二元運算子。只要在左右的運算元中其中一個的值是 True 的時候,它便會回傳 True 值,否則會回傳 False 值。以下為使用 OR 邏輯運算子的一些可能的狀況跟該狀況下會回傳的值:
a 的值 | b 的值 | a OR b 回傳的值 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
3. XOR 邏輯運算子
XOR 邏輯運算子在大多數的程式語言中是以 XOR 或 ^ 表示的二元運算子。只有左右的運算元的值不一樣的時候,它才會回傳 True 值,否則都會回傳 False 值。以下為使用 XOR 邏輯運算子的一些可能的狀況跟該狀況下會回傳的值:
a 的值 | b 的值 | a XOR b 回傳的值 |
---|---|---|
True | True | False |
True | False | True |
False | True | True |
False | False | False |
4. NOT 邏輯運算子
NOT 邏輯運算子在大多數的程式語言中是以 NOT 或 ! 表示的一元運算子。它會回傳跟運算元相反的值。以下為使用 NOT 邏輯運算子的一些可能的狀況跟該狀況下會回傳的值:
a 的值 | NOT a 回傳的值 |
---|---|
True | False |
False | True |
5. 條件邏輯運算子 && 及 ||
有些程式會語言會提供邏輯運算子中的一項分支條件邏輯運算子,通常為 && (AND 條件邏輯運算子) 及 || (OR 條件邏輯運算子)。條件邏輯運算子和一般的邏輯運算子有什麼差別呢?那就是一般的邏輯運算子一定會比較左右兩個運算元的值,而條件邏輯運算子則是會先看看能否從左邊的運算元推論出結果的值,如果可以的話便會直接跳過檢查右邊的運算元的步驟,直接回傳結果的值。
舉例來說,當我們使用 AND 條件邏輯運算子來比較運算元 a 跟 b (a && b)時,如果 a 的值為 False 的話,那程式便會直接回傳 False 給我們;相反,如果 a 的值為 True 的話,那程式便會先檢查 b 的值再回傳結果的值給我們。
今天,我們介紹了算術運算子,比較運算子跟邏輯運算子。剩下的三種運算子就讓我們明天繼續進行討論吧~